/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package construtora.limiar.dao;

import construtora.limiar.dao.generic.AbstractDAO;
import construtora.limiar.dao.generic.DAOEngine;
import construtora.limiar.dao.generic.IDAO;
import construtora.limiar.models.Endereco;
import construtora.limiar.models.Funcionario;
import construtora.limiar.models.Setor;
import construtora.limiar.models.Usuario;
import construtora.limiar.models.generic.IModel;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author michel
 */
public class FuncionarioDAO extends AbstractDAO implements IDAO{

    public FuncionarioDAO(){
        this.table = "funcionario";
    }
    
    @Override
    public String[][] getFields(IModel model) {
        Funcionario funcionario = (Funcionario) model;
        String[][] fields = new String[9][2];
        fields[0][0] = "nome";
        fields[0][1] = "'" + funcionario.getNome() + "'";
        fields[1][0] = "cpf";
        fields[1][1] = "'" + funcionario.getCpf() + "'";
        fields[2][0] = "id_endereco";
        fields[2][1] = "'" + funcionario.getEndereco().getId().toString() + "'";        
        fields[3][0] = "id_setor";
        fields[3][1] = "'" + funcionario.getSetor().getId().toString() + "'";
        fields[4][0] = "cargo";
        fields[4][1] = "'" + funcionario.getCargo() + "'";
        fields[5][0] = "status";
        fields[5][1] = "'" + funcionario.getStatus() + "'";
        fields[6][0] = "id_usuario";
        fields[6][1] = "'" + funcionario.getUsuario().getId().toString() + "'";
        fields[7][0] = "tipo_telefone";
        fields[7][1] = "'" + funcionario.getTipoTelefone() + "'";
        fields[8][0] = "numero_telefone";
        fields[8][1] = "'" + funcionario.getTelefone() + "'";
        return fields;
    }

    @Override
    public IModel fetchOne(IModel model) {
        String where = this.getDefaultWhere(model);
        Funcionario funcionario = new Funcionario();
        //EnderecoDAO endDAO = new EnderecoDAO();
        //SetorDAO setDAO = new SetorDAO();
        //UsuarioDAO usuDAO = new UsuarioDAO();
        List<Funcionario> list = (List<Funcionario>) this.fetchAll(where, null, null, null);
        if (list != null && list.size() > 0){
            funcionario = list.get(0);
            //funcionario.setEndereco((Endereco) endDAO.fetchOne(new Endereco(funcionario.getEndereco().getId())));
            //funcionario.setSetor((Setor) setDAO.fetchOne(new Setor(funcionario.getSetor().getId())));
            //funcionario.setUsuario((Usuario) usuDAO.fetchOne(new Usuario(funcionario.getUsuario().getId())));
            return funcionario;
        }
            
        else
            return null;
    }

    @Override
    public List<? extends IModel> fetchAll(String where, String order, Integer limit, Integer offset) {
        List<Funcionario> list = new ArrayList<Funcionario>();
        ResultSet rs = DAOEngine.fetchAll(this.table, where, order, limit, offset);
        try {
            while (rs.next()){
                Funcionario funcionario = new Funcionario();
                EnderecoDAO endDAO = new EnderecoDAO();
                SetorDAO setDAO = new SetorDAO();
                UsuarioDAO usuDAO = new UsuarioDAO();
                funcionario.setId(rs.getInt("id_funcionario"));
                funcionario.setNome(rs.getString("nome"));
                funcionario.setCpf(rs.getString("cpf"));
                funcionario.setCargo(rs.getString("cargo"));
                funcionario.setStatus(rs.getString("status"));
                funcionario.setTipoTelefone(rs.getString("tipo_telefone"));
                funcionario.setTelefone(rs.getString("numero_telefone"));
                funcionario.setEndereco((Endereco) endDAO.fetchOne(new Endereco(rs.getInt("id_endereco"))));
                funcionario.setSetor((Setor) setDAO.fetchOne(new Setor(rs.getInt("id_setor"))));
                funcionario.setUsuario((Usuario) usuDAO.fetchOne(new Usuario(rs.getInt("id_usuario"))));
                list.add(funcionario);
            }
            return list;
        }catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
}
